package com.atguigu.gmall.order.service;

import com.atguigu.gmall.model.enums.ProcessStatus;
import com.atguigu.gmall.model.order.OrderInfo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.google.common.collect.Ordering;

public interface OrderService extends IService<OrderInfo> {
    /**
     * 提交订单
     * @param orderInfo
     * @return
     */
    Long submitOrder(OrderInfo orderInfo);


    /**
     * 生成流水号
     * @param userId
     * @return
     */
    String getTradeNo(String userId);

    /**
     * 校验流水号
     * @param userId
     * @param tradeCodeNo
     * @return
     */
    boolean checkTradeCode(String userId,String tradeCodeNo);


    /**
     * 删除流水号
     * @param userId
     */
    void  deleteTradeNo(String userId);

    /**
     * 校验库存
     * @param skuId
     * @param skuNum
     * @return
     */
    boolean chechStock(Long skuId, Integer skuNum);

    /**
     * 我的订单
     * @param orderInfoPage
     * @param userId
     * @return
     */
    IPage<OrderInfo> getOrderPageList(Page<OrderInfo> orderInfoPage, String userId);

    /**
     * 超时关闭订单
     * @param orderId
     */
    void execExpireOrder(Long orderId);

    /**
     * 修改订单状态
     * @param orderId
     * @param processStatus
     */
    void updateOrderStatus(Long orderId, ProcessStatus processStatus);
}
